/**
 * 第15章 并发基础知识
 * 代码清单-p2ch15b-451页a：简单协作示例 {@link top.kaoshanji.p2ch15b.WaitThread}
 * 代码清单-p2ch15b-453页a：生产者/消费者协作队列 {@link top.kaoshanji.p2ch15b.MyBlockingQueue}
 * 代码清单-p2ch15b-454页a：一个简单的生产者 {@link top.kaoshanji.p2ch15b.MyBlockingQueueProducer}
 * 代码清单-p2ch15b-454页b：一个简单的消费者 {@link top.kaoshanji.p2ch15b.MyBlockingQueueConsumer}
 * 代码清单-p2ch15b-455页a：协作队列主程序 {@link top.kaoshanji.p2ch15b.MyBlockingQueueDemo}
 * 代码清单-p2ch15b-455页b：协作对象FireFlag {@link top.kaoshanji.p2ch15b.RacerFireFlag}
 * 代码清单-p2ch15b-456页a：表示比赛运动员的类 {@link top.kaoshanji.p2ch15b.RacerThread}
 * 代码清单-p2ch15b-456页b：同时开始的主类 {@link top.kaoshanji.p2ch15b.RacerDemo}
 * 代码清单-p2ch15b-457页a：协作对象MyLatch {@link top.kaoshanji.p2ch15b.MyLatch}
 * 代码清单-p2ch15b-457页b：使用MyLatch的工作子线程 {@link top.kaoshanji.p2ch15b.MyLatchWorkerThread}
 * 代码清单-p2ch15b-457页c：等待结束的主类 {@link top.kaoshanji.p2ch15b.MyLatchDemo}
 * 代码清单-p2ch15b-459页a：表示异步调用的结果 {@link top.kaoshanji.p2ch15b.MyFuture}
 * 代码清单-p2ch15b-460页a：执行子线程 {@link top.kaoshanji.p2ch15b.MyFutureExecuteThread}
 * 代码清单-p2ch15b-460页b：异步执行任务 {@link top.kaoshanji.p2ch15b.MyFutureExecutorDome#execute(java.util.concurrent.Callable)}
 * 代码清单-p2ch15b-459页b：异步调用示例 {@link top.kaoshanji.p2ch15b.MyFutureExecutorDome#main(java.lang.String[])}
 * 代码清单-p2ch15b-461页a：协作对象 {@link top.kaoshanji.p2ch15b.AssemblePoint}
 * 代码清单-p2ch15b-462页a：集合点线程 {@link top.kaoshanji.p2ch15b.AssemblePointThread}
 * 代码清单-p2ch15b-462页b：集合点协作示例 {@link top.kaoshanji.p2ch15b.AssemblePointDemo}
 * 代码清单-p2ch15b-464页a：线程处于RUNNABLE状态对中断的反应 {@link top.kaoshanji.p2ch15b.InterruptRunnableDemo}
 * 代码清单-p2ch15b-465页a：线程处于WAITING状态对中断的反应 {@link top.kaoshanji.p2ch15b.InterruptWaitingDemo}
 * 代码清单-p2ch15b-466页a：线程处于BLOCKED状态对中断的反应 {@link top.kaoshanji.p2ch15b.InterruptSynchronizedDemo}
 * author kaoshanji
 * ^_^
 * create time 2025/2/23 20:04
 */
package top.kaoshanji.p2ch15b;